プレビューになったBigQuery Studio Notebookのスケジュール実行機能を試してみた
データアナリティクス事業本部の根本です。新たにBigQuery StudioのNotebookにスケジュール実行できる機能がプレビューとなりました。
June 13, 2024
面白い機能だなと思ったので実際に触ってみて、記事にしてみました。
追加される機能について
概要
BigQuery Notebookを指定した時間と頻度で自動的に実行するようにスケジュールできます。
pythonで実装できDataFrameとしてデータを処理することができるので処理の自由度が高いです。
スケジュールドクエリなどSQLだけでは難しい処理をpythonで実装して日次など決まったタイミングで実行したい場合に役に立つと考えます。
料金
リファレンスではColab Enterprise のランタイム料金が適用されます
との記載がありました。
Colab Enterprise charges for runtimes apply. You are charged for runtime processing based on the E2 machine type. For information about pricing of standard E2 runtimes, see Colab Enterprise pricing.
Colab Enterprise のランタイム料金が適用されます。E2マシンタイプに基づき、ランタイム処理に課金されます。標準E2ランタイムの価格については、Colab Enterpriseの価格をご参照ください。(DeepL翻訳)
引用:https://cloud.google.com/bigquery/docs/manage-notebooks#schedule_notebooks
Notebookのスケジュール作成画面では、ランタイムテンプレートが固定でE2(4vCPUs, 16GB RAM)
となっていました。
よってColab Enterpriseのランタイム料金うち以下が発生するものと考えます(asia-northeast1です)。
CPU
Machine type | Price per vCPU/hour (USD) |
---|---|
E2 | $0.0336317 |
Memory
Machine type | Price per GB hour (USD) |
---|---|
E2 | $0.0044869 |
※2024/6/14時点の情報です
サービスアカウント
Notebookをスケジュールするには、使用するサービスアカウントに以下のロールを付与する必要があります。
- Notebook Executor User
roles/aiplatform.notebookExecutorUser
- Storage Admin
roles/storage.admin
- Service Account User
roles/iam.serviceAccountUser
- Service Account Token Creator
roles/iam.serviceAccountTokenCreator
上記のロールに加えて、実際にBigQueryのデータ操作を行うにはDataformを実行できるサービスアカウントの権限も必要となります。
Dataformサービスアカウントに必要な権限
実際にスケジュールしてみる
実際にNotebookを作成してスケジュール実行までしてみました。
Notebookを作成する
PYTHON ノートブック
ボタンを押下して新規Notebookを作成します。
import bigframes.pandas as bf from google.cloud import bigquery project_id = "プロジェクトID" bf.options.bigquery.location = "asia-northeast1" bf.options.bigquery.project = project_id client = bigquery.Client() client = bigquery.Client(project=project_id) df = bf.read_gbq('Insert元データテーブル') table = client.get_table('Insert対象テーブル') client.insert_rows(table, df.values.tolist())
作成したスクリプトは、あるテーブルのデータ全件を別テーブルに全件Insertするというシンプルなスクリプトです。
上記スクリプトをNotebookに貼り付けて適当な名前で保存します。
保存できたら、画面上部スケジュール
ボタンを押下します。
スケジューラの設定画面が出てくるので各種設定をします。
設定できる項目としては以下となります。
設定項目 | 内容 |
---|---|
スケジュール名 | スケジュール名 |
サービスアカウント | スケジュール設定したNotebookを実行するサービスアカウント |
Cloud Storageバケット | 指定したバケットに実行結果のhtmlとNotebookファイルが出力される |
スケジュールの頻度 | 毎日・毎週・毎月・カスタム(cron式)を選択可能 |
時刻 | スケジュール実行される時刻 |
※ランタイムテンプレートは固定で変更することはできませんでした
スケジュール設定をすると、デプロイ済み
・スケジュールを見る
という表示に変わっています。
スケジュール設定を行なった後に、Notebookに変更を加えた場合にスケジューラ実行に反映するにはNotebookを保存してデプロイをする必要があります。
作成したスケジュールを見てみます。
このように設定した内容を確認することやスケジュールを無効にすることもできます。
スケジュール実行後
作成したスケジュールの画面で過去の実行を表示
を押下すると以下のように過去の実行結果を確認することができます。
赤枠の日付の箇所を押下すると、さらに詳細な実行結果を確認できます。
詳細な実行結果確認画面のバケット内のファイル
を押下すると、Cloud Storageに出力されたNotebookと実行結果のファイルを確認できます。
- content.html:Notebook実行結果ファイル
- content.ipynb:Notebookファイル
まとめ
スケジューラ設定自体はとっても簡単なので、日次でpythonスクリプトでBigQueryに対して処理をしたいという場合には選択肢の一つになってくるものと考えます。
実行されるランタイムがE2(4vCPUs, 16GB RAM)
となるのでプチな処理に使うにはもったいなかったりもするかもしれないので、ワークロードやコストも考慮ポイントの一つかなと思いました。GAになるまでに他のランタイムが選べたりするようになるとさらに幅も広がるかなと思います。
この記事がどなたかのお役に立てば嬉しいです。それではまた。